package com.woniu.microchargeserver.chargemag.service;

import com.github.pagehelper.PageInfo;
import com.woniu.microchargeserver.common.bean.dtobean.RoomChargeDto;
import com.woniu.microchargeserver.common.bean.dtobean.RoomChargeProDto;
import com.woniu.microcommonsserver.entity.RoomChargedItemsInfoEntity;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**房间、收费项目 的中间表服务
 * @author: hejie
 * @date: 2021/1/25 9:43
 * @description:
 */
public interface IRoomChargeService {





    /**
     * 分页查询数据:通过房间id查询 该房间的收费项目
     * @author hejie
     * @param pageNum 第几页
     * @param pageSize 每页显示多少条数据
     * @param column 排序的字段
     * @param order 升序还是降序
     * @param roomId 房间的id
     *@param roomName 页面上显示的房间名字（它不去数据库参与查询，而是直接在impl中赋值），如3-5-1002（指3号楼-5栋-10层-02号）
     * @return
     */
    PageInfo<RoomChargeDto> findRoomChargeItemByRoomId(int pageNum, int pageSize, String column,
                                                       String order, Long roomId,String roomName);

    /**
     * 修改：房间、项目中间表
     * @param roomChargedItemsInfoEntity
     */
    int update(RoomChargedItemsInfoEntity roomChargedItemsInfoEntity);

    /**
     * 新增 一个收费项目、房间的中间表
     * @author hejie
     * @param chargedItemsInfoId  收费项目外键id
     * @param currentRoomId  房间外键id：用户当前点击的房间的id
     *                       注意：impl中根据“收费项目”中的“周期单位”自己设置“开始计费时间和结束计费时间”
     * @return
     */
    void addRoomCharge(Long currentRoomId, Long chargedItemsInfoId);

    /**
     * 新增 一个收费项目、房间的中间表
     * @author hejie
     * @param id:根据 房间、收费项目中间表的id：删除一个中间表的记录
     * @return
     */
    int delRoomCharge(Long id);


    /**查询所有的 房间（就是房间的List）：List<SpaceInfoEntity>
     * 根据“build_info中的id”查询属于该build的所有building下的所有房间(如“水青花都小区-11号楼-5单元-8层-802”，即rank为4的SpaceInfoEntity)
     * 如3号楼
     * @author hejie
     * @param bId：build_info中的id
     * @param buildingId 楼栋的id
//     * @param buildingAbbreviation 楼栋
     * @param roomName 房间的名字（在前端传入的是 “3-5-1002”，impl处需要 把它转为“xxx小区-3号楼-5单元-10层-1002”）
     * @return
     */
    List<RoomChargeProDto> findRoomsByParams(Long bId, Long buildingId, String roomName,String ownerName);


    /**
     *  每天定时任务1 sql1：结束时间到了，设置“收费项目中间表”  amount_receivable 和 total_payable 设置为项目的价格：收费表、中间表 联查
     *      条件：1.计费结束时间到了，中间表amount_receivable、total_payable其中一个为0或null
     *        2.没有支付 （即r.complete_payment_status=2）
     */
    int updateReceivablePayable();

    /**
     *  每天定时任务2 sql2：
     *    1.结束时间 + 违约天数 >now()：计算违约金： 违约金率*(now-违约天数-结束时间) ：收费表、中间表 联查
     *    2.没有支付（即r.complete_payment_status=2）
     *    DATEDIFF(date1,date2)    两个日期相减函数，返回date1-date2相差的天数
     */
    int updateLiquidatedDamages();
}
